import { ref } from 'vue'
import { defineStore } from 'pinia'
import { getMemberApi, getUserIdFromToken, loginAPI } from '@/apis/user'
import { useCartStore } from './cart'

import { saveJwt } from '@/utils/jwt'
// 储存用户信息
export const useUserStore = defineStore(
  'user',
  () => {
    // 调用购物车store
    const cartStore = useCartStore()
    // 定义用户管理的state
    const userInfo = ref({})

    // 定义获取数据的action函数
    const getUserInfo = async ({ account, password }) => {
      try {
        const res = await loginAPI({ account, password })

        // 保存JWT
        saveJwt(res.data)

        const token = res.data
        const userId = getUserIdFromToken(token)

        // 更新用户信息
        userInfo.value.token = res.data
        userInfo.value.data = res.data

        // 获取用户详细信息
        const message = await getMemberApi(userId)
        userInfo.value.message = message.data

        // 登录成功后初始化购物车数据
        await cartStore.initCart()

        // 返回成功结果
        return true
      } catch (error) {
        // 捕获登录API调用的错误
        console.error('登录API调用失败:', error)

        // 抛出错误，让调用者处理
        throw new Error('账号或密码错误')
      }
    }

    // 退出时清除用户信息
    const clearUserInfo = () => {
      userInfo.value = {}
      cartStore.clearCart()
    }

    return {
      getUserInfo,
      userInfo,
      clearUserInfo
    }
  },
  {
    persist: true
  }
)